package com.southminority.ethnic.service.contact;

import com.southminority.ethnic.controller.contact.vo.ContactVO;
import com.southminority.ethnic.common.result.PageResult;
import jakarta.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 联系留言服务接口
 * 
 * @author SouthMinority
 */
public interface ContactService {

    // ==================== 前端接口 ====================

    /**
     * 提交联系表单
     * @param contactVO 联系信息
     * @param request HTTP请求对象（用于获取IP和User-Agent）
     * @return 提交结果
     */
    ContactVO submitContact(ContactVO contactVO, HttpServletRequest request);

    /**
     * 获取联系类型列表
     * @return 联系类型列表
     */
    List<String> getContactTypeList();

    // ==================== 管理端接口 ====================

    /**
     * 分页查询联系留言
     * @param current 当前页
     * @param size 每页大小
     * @param keyword 关键词
     * @param contactType 联系类型
     * @param status 状态
     * @return 分页结果
     */
    PageResult<ContactVO> getContactPage(Long current, Long size, String keyword, String contactType, Integer status);

    /**
     * 获取所有联系留言列表
     * @return 所有联系留言
     */
    List<ContactVO> getAllContactList();

    /**
     * 根据ID获取联系留言
     * @param id 联系ID
     * @return 联系留言详情
     */
    ContactVO getContactById(Long id);

    /**
     * 更新联系留言状态
     * @param id 联系ID
     * @param status 状态
     * @return 是否更新成功
     */
    Boolean updateContactStatus(Long id, Integer status);

    /**
     * 回复联系留言
     * @param id 联系ID
     * @param replyContent 回复内容
     * @param replyUserId 回复人ID
     * @return 是否回复成功
     */
    Boolean replyContact(Long id, String replyContent, Long replyUserId);

    /**
     * 删除联系留言
     * @param id 联系ID
     * @return 是否删除成功
     */
    Boolean deleteContact(Long id);

    /**
     * 批量删除联系留言
     * @param ids 联系ID列表
     * @return 是否删除成功
     */
    Boolean batchDeleteContact(List<Long> ids);

    /**
     * 获取待处理留言数量
     * @return 待处理数量
     */
    Long getPendingContactCount();

    /**
     * 获取最新留言列表
     * @param limit 数量限制
     * @return 最新留言列表
     */
    List<ContactVO> getLatestContactList(Integer limit);

    /**
     * 根据联系类型统计数量
     * @return 类型统计结果
     */
    List<ContactVO> getContactTypeStatistics();

} 